home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple WWDC 1996
/
WWDC96_1996 (CD).toast
/
Technology Materials
/
MacOS 8 Resources
/
Developer Tools
/
Mac OS 8 Interfaces & Libraries
/
Interfaces
/
PInterfaces
/
OCEMessaging.p
< prev
next >
Wrap
Text File
|
1996-05-01
|
30KB
|
1,160 lines
{
File: OCEMessaging.p
Contains: Apple Open Collaboration Environment Messaging Interfaces.
Version: Technology: AOCE Toolbox 1.02
Release: Universal Interfaces 3.0d3 on Copland DR1
Copyright: © 1984-1996 by Apple Computer, Inc. All rights reserved.
Bugs?: If you find a problem with this file, send the file and version
information (from above) and the problem description to:
Internet: apple.bugs@applelink.apple.com
AppleLink: APPLE.BUGS
}
{$IFC UNDEFINED UsingIncludes}
{$SETC UsingIncludes := 0}
{$ENDC}
{$IFC NOT UsingIncludes}
UNIT OCEMessaging;
INTERFACE
{$ENDC}
{$IFC UNDEFINED __OCEMESSAGING__}
{$SETC __OCEMESSAGING__ := 1}
{$I+}
{$SETC OCEMessagingIncludes := UsingIncludes}
{$SETC UsingIncludes := 1}
{$IFC UNDEFINED __FILES__}
{$I Files.p}
{$ENDC}
{$IFC UNDEFINED __TYPES__}
{$I Types.p}
{$ENDC}
{$IFC UNDEFINED __DIGITALSIGNATURE__}
{$I DigitalSignature.p}
{$ENDC}
{$IFC UNDEFINED __OCE__}
{$I OCE.p}
{$ENDC}
{$IFC UNDEFINED __OCEAUTHDIR__}
{$I OCEAuthDir.p}
{$ENDC}
{$PUSH}
{$ALIGN MAC68K}
{$LibExport+}
{$IFC FOR_SYSTEM7_ONLY }
{ **************************************************************************** }
{
Definitions common to OCEMessaging and to OCEMail. These relate to addressing,
message ids and priorities, etc.
}
{ Values of IPMPriority }
CONST
kIPMAnyPriority = 0; { FOR FILTER ONLY }
kIPMNormalPriority = 1;
kIPMLowPriority = 2;
kIPMHighPriority = 3;
TYPE
IPMPriority = Byte;
{ Values of IPMAccessMode }
CONST
kIPMAtMark = 0;
kIPMFromStart = 1;
kIPMFromLEOM = 2;
kIPMFromMark = 3;
TYPE
IPMAccessMode = INTEGER;
CONST
kIPMUpdateMsgBit = 4;
kIPMNewMsgBit = 5;
kIPMDeleteMsgBit = 6;
{ Values of IPMNotificationType }
kIPMUpdateMsgMask = $10;
kIPMNewMsgMask = $20;
kIPMDeleteMsgMask = $40;
TYPE
IPMNotificationType = Byte;
{ Values of IPMSenderTag }
CONST
kIPMSenderRStringTag = 0;
kIPMSenderRecordIDTag = 1;
TYPE
IPMSenderTag = INTEGER;
CONST
kIPMFromDistListBit = 0;
kIPMDummyRecBit = 1;
kIPMFeedbackRecBit = 2; { should be redirected to feedback queue }
kIPMReporterRecBit = 3; { should be redirected to reporter original queue }
kIPMBCCRecBit = 4; { this recipient is blind to all recipients of message }
{ Values of OCERecipientOffsetFlags }
kIPMFromDistListMask = $01;
kIPMDummyRecMask = $02;
kIPMFeedbackRecMask = $04;
kIPMReporterRecMask = $08;
kIPMBCCRecMask = $10;
TYPE
OCERecipientOffsetFlags = Byte;
OCECreatorTypePtr = ^OCECreatorType;
OCECreatorType = RECORD
msgCreator: OSType;
msgType: OSType;
END;
CONST
kIPMTypeWildCard = 'ipmw';
kIPMFamilyUnspecified = 0;
kIPMFamilyWildCard = $3F3F3F3F; { '????' * well known signature }
kIPMSignature = 'ipms'; { base type * well known message types }
kIPMReportNotify = 'rptn'; { routing feedback * well known message block types }
kIPMEnclosedMsgType = 'emsg'; { enclosed (nested) message }
kIPMReportInfo = 'rpti'; { recipient information }
kIPMDigitalSignature = 'dsig'; { digital signature }
{ Values of IPMMsgFormat }
kIPMOSFormatType = 1;
kIPMStringFormatType = 2;
TYPE
IPMMsgFormat = INTEGER;
IPMStringMsgType = Str32;
TheTypePtr = ^TheType;
TheType = RECORD
CASE INTEGER OF
0: (
msgOSType: OCECreatorType;
);
1: (
msgStrType: IPMStringMsgType;
);
END;
IPMMsgTypePtr = ^IPMMsgType;
IPMMsgType = RECORD
format: IPMMsgFormat; { IPMMsgFormat }
theType: TheType;
END;
{
Following are the known extension values for IPM addresses handled by Apple.
We define the definition of the entn extension below.
}
CONST
kOCEalanXtn = 'alan';
kOCEentnXtn = 'entn'; { entn = entity name (aka DSSpec) }
kOCEaphnXtn = 'aphn';
{
Following are the specific definitions for the extension for the standard
OCEMail 'entn' addresses. [Note, the actual extension is formatted as in
IPMEntityNameExtension.]
}
{ entn extension forms }
kOCEAddrXtn = 'addr';
kOCEQnamXtn = 'qnam';
kOCEAttrXtn = 'attr'; { an attribute specification }
kOCESpAtXtn = 'spat'; { specific attribute }
{
Following are the specific definitions for standard
OCEMail 'aphn' extension value.
All RStrings here are packed (e.g. truncated to length) and even padded (e.g.
if length odd, then a pad byte (zero) should be introduced before the next field).
The extension value is in the packed form of the following structure:
RString phoneNumber;
RString modemType;
Str32 queueuName;
The body of phoneNumber compound RString is in the packed form of the following structure:
short subType;
RString countryCode; // used when subType == kOCEUseHandyDial
RString areaCode; // used when subType == kOCEUseHandyDial
RString phone; // used when subType == kOCEUseHandyDial
RString postFix; // used when subType == kOCEUseHandyDial
RString nonHandyDialString; // used when subType == kOCEDontUseHandyDial
}
{ phoneNumber sub type constants }
kOCEUseHandyDial = 1;
kOCEDontUseHandyDial = 2;
{ FORMAT OF A PACKED FORM RECIPIENT }
TYPE
ProtoOCEPackedRecipientPtr = ^ProtoOCEPackedRecipient;
ProtoOCEPackedRecipient = RECORD
dataLength: INTEGER;
END;
CONST
kOCEPackedRecipientMaxBytes = 4094;
TYPE
OCEPackedRecipientPtr = ^OCEPackedRecipient;
OCEPackedRecipient = RECORD
dataLength: INTEGER;
data: PACKED ARRAY [0..4093] OF Byte;
END;
IPMEntnQueueExtensionPtr = ^IPMEntnQueueExtension;
IPMEntnQueueExtension = RECORD
queueName: Str32;
END;
{ kOCEAttrXtn }
IPMEntnAttributeExtensionPtr = ^IPMEntnAttributeExtension;
IPMEntnAttributeExtension = RECORD
attributeName: AttributeType;
END;
{ kOCESpAtXtn }
IPMEntnSpecificAttributeExtensionPtr = ^IPMEntnSpecificAttributeExtension;
IPMEntnSpecificAttributeExtension = RECORD
attributeCreationID: AttributeCreationID;
attributeName: AttributeType;
END;
{ All IPM entn extensions fit within the following }
IPMEntityNameExtensionPtr = ^IPMEntityNameExtension;
IPMEntityNameExtension = RECORD
subExtensionType: OSType;
CASE INTEGER OF
0: (
specificAttribute: IPMEntnSpecificAttributeExtension;
);
1: (
attribute: IPMEntnAttributeExtension;
);
2: (
queue: IPMEntnQueueExtension;
);
END;
{ addresses with kIPMNBPXtn should specify this nbp type }
IPMMsgIDPtr = ^IPMMsgID;
IPMMsgID = RECORD
id: ARRAY [0..3] OF LONGINT;
END;
{ Values of IPMHeaderSelector }
CONST
kIPMTOC = 0;
kIPMSender = 1;
kIPMProcessHint = 2;
kIPMMessageTitle = 3;
kIPMMessageType = 4;
kIPMFixedInfo = 7;
TYPE
IPMHeaderSelector = Byte;
TheSenderPtr = ^TheSender;
TheSender = RECORD
CASE INTEGER OF
0: (
rString: RString;
);
1: (
rid: PackedRecordID;
);
END;
IPMSenderPtr = ^IPMSender;
IPMSender = RECORD
sendTag: IPMSenderTag;
theSender: TheSender;
END;
{ **************************************************************************** }
{ Definitions specific to OCEMessaging }
IPMContextRef = LONGINT;
IPMQueueRef = LONGINT;
IPMMsgRef = LONGINT;
IPMSeqNum = LONGINT;
IPMProcHint = Str32;
IPMQueueName = Str32;
IPMNoteProcPtr = ProcPtr; { PROCEDURE IPMNote(queue: IPMQueueRef; seqNum: IPMSeqNum; notificationType: ByteParameter; userData: LONGINT); }
IPMNoteUPP = UniversalProcPtr;
CONST
uppIPMNoteProcInfo = $000037C0;
FUNCTION NewIPMNoteProc(userRoutine: IPMNoteProcPtr): IPMNoteUPP;
{$IFC NOT GENERATINGCFM }
INLINE $2E9F;
{$ENDC}
PROCEDURE CallIPMNoteProc(queue: IPMQueueRef; seqNum: IPMSeqNum; notificationType: ByteParameter; userData: LONGINT; userRoutine: IPMNoteUPP);
{$IFC NOT GENERATINGCFM}
INLINE $205F, $4E90;
{$ENDC}
TYPE
IPMFixedHdrInfoPtr = ^IPMFixedHdrInfo;
IPMFixedHdrInfo = RECORD
version: INTEGER;
authenticated: BOOLEAN;
signatureEnclosed: BOOLEAN; { digital signature enclosed }
msgSize: LONGINT;
notification: SInt8;
priority: SInt8;
blockCount: INTEGER;
originalRcptCount: INTEGER; { original number of recipients }
refCon: LONGINT; { Client defined data }
reserved: INTEGER;
creationTime: UTCTime; { Time when it was created }
msgID: IPMMsgID;
family: OSType; { family this msg belongs (e.g. mail) }
END;
CONST
kIPMDeliveryNotificationBit = 0;
kIPMNonDeliveryNotificationBit = 1;
kIPMEncloseOriginalBit = 2;
kIPMSummaryReportBit = 3; { modify enclose original to only on error }
kIPMOriginalOnlyOnErrorBit = 4;
kIPMNoNotificationMask = $00;
kIPMDeliveryNotificationMask = $01;
kIPMNonDeliveryNotificationMask = $02;
kIPMDontEncloseOriginalMask = $00;
kIPMEncloseOriginalMask = $04;
kIPMImmediateReportMask = $00;
kIPMSummaryReportMask = $08;
kIPMOriginalOnlyOnErrorMask = $10;
kIPMEncloseOriginalOnErrorMask = $14;
{ standard Non delivery codes }
kIPMNoSuchRecipient = $0001;
kIPMRecipientMalformed = $0002;
kIPMRecipientAmbiguous = $0003;
kIPMRecipientAccessDenied = $0004;
kIPMGroupExpansionProblem = $0005;
kIPMMsgUnreadable = $0006;
kIPMMsgExpired = $0007;
kIPMMsgNoTranslatableContent = $0008;
kIPMRecipientReqStdCont = $0009;
kIPMRecipientReqSnapShot = $000A;
kIPMNoTransferDiskFull = $000B;
kIPMNoTransferMsgRejectedbyDest = $000C;
kIPMNoTransferMsgTooLarge = $000D;
{ *********************************************************************** }
{
This is the structure that will be returned by enumerate and getmsginfo
This definition is just to give you a template, the position of msgType
is variable since this is a packed structure. procHint and msgType are
packed and even length padded.
* master message info
}
TYPE
IPMMsgInfoPtr = ^IPMMsgInfo;
IPMMsgInfo = RECORD
sequenceNum: IPMSeqNum;
userData: LONGINT;
respIndex: INTEGER;
padByte: SInt8;
priority: SInt8;
msgSize: LONGINT;
originalRcptCount: INTEGER;
reserved: INTEGER;
creationTime: UTCTime;
msgID: IPMMsgID;
family: OSType; { family this msg belongs (e.g. mail) }
procHint: IPMProcHint;
filler2: SInt8;
msgType: IPMMsgType;
END;
IPMBlockType = OCECreatorType;
IPMBlockTypePtr = ^IPMBlockType;
IPMTOCPtr = ^IPMTOC;
IPMTOC = RECORD
blockType: IPMBlockType;
blockOffset: LONGINT;
blockSize: LONGINT;
blockRefCon: LONGINT;
END;
{
The following structure is just to describe the layout of the SingleFilter.
Each field should be packed and word aligned when passed to the IPM ToolBox.
}
IPMSingleFilterPtr = ^IPMSingleFilter;
IPMSingleFilter = RECORD
priority: SInt8;
padByte: SInt8;
family: OSType; { family this msg belongs (e.g. mail), '????' for all }
script: ScriptCode; { Language Identifier }
hint: IPMProcHint;
filler2: SInt8;
msgType: IPMMsgType;
END;
IPMFilterPtr = ^IPMFilter;
IPMFilter = RECORD
count: INTEGER;
sFilters: ARRAY [0..0] OF IPMSingleFilter;
END;
{
************************************************************************
Following structures define the ``start'' of a recipient report block and the
elements of the array respectively.
}
IPMReportBlockHeaderPtr = ^IPMReportBlockHeader;
IPMReportBlockHeader = RECORD
msgID: IPMMsgID; { message id of the original }
creationTime: UTCTime; { creation time of the report }
END;
OCERecipientReportPtr = ^OCERecipientReport;
OCERecipientReport = RECORD
rcptIndex: INTEGER; { index of recipient in original message }
result: OSErr; { result of sending letter to this recipient }
END;
{ *********************************************************************** }
IPMParamBlockPtr = ^IPMParamBlock;
IPMIOCompletionProcPtr = Register68kProcPtr; { PROCEDURE IPMIOCompletion(paramBlock: IPMParamBlockPtr); }
IPMIOCompletionUPP = UniversalProcPtr;
IPMOpenContextPBPtr = ^IPMOpenContextPB;
IPMOpenContextPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
contextRef: IPMContextRef; { <-- Context reference to be used in further calls }
END;
IPMCloseContextPB = IPMOpenContextPB;
IPMCloseContextPBPtr = ^IPMCloseContextPB;
IPMCreateQueuePBPtr = ^IPMCreateQueuePB;
IPMCreateQueuePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
filler1: LONGINT;
queue: OCERecipientPtr;
identity: AuthIdentity; { used only if queue is remote }
owner: PackedRecordIDPtr; { used only if queue is remote }
END;
{ For createqueue and deletequeue only queue and identity are used }
IPMDeleteQueuePB = IPMCreateQueuePB;
IPMDeleteQueuePBPtr = ^IPMDeleteQueuePB;
IPMOpenQueuePBPtr = ^IPMOpenQueuePB;
IPMOpenQueuePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
contextRef: IPMContextRef;
queue: OCERecipientPtr;
identity: AuthIdentity;
filter: IPMFilterPtr;
newQueueRef: IPMQueueRef;
notificationProc: IPMNoteUPP;
userData: LONGINT;
noteType: SInt8;
padByte: SInt8;
reserved: LONGINT;
reserved2: LONGINT;
END;
IPMCloseQueuePBPtr = ^IPMCloseQueuePB;
IPMCloseQueuePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
queueRef: IPMQueueRef;
END;
IPMEnumerateQueuePBPtr = ^IPMEnumerateQueuePB;
IPMEnumerateQueuePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
queueRef: IPMQueueRef;
startSeqNum: IPMSeqNum;
getProcHint: BOOLEAN;
getMsgType: BOOLEAN;
filler: INTEGER;
filter: IPMFilterPtr;
numToGet: INTEGER;
numGotten: INTEGER;
enumCount: LONGINT;
enumBuffer: Ptr; { will be packed array of IPMMsgInfo }
actEnumCount: LONGINT;
END;
IPMChangeQueueFilterPB = IPMEnumerateQueuePB;
IPMChangeQueueFilterPBPtr = ^IPMChangeQueueFilterPB;
IPMDeleteMsgRangePBPtr = ^IPMDeleteMsgRangePB;
IPMDeleteMsgRangePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
queueRef: IPMQueueRef;
startSeqNum: IPMSeqNum;
endSeqNum: IPMSeqNum;
lastSeqNum: IPMSeqNum;
END;
IPMOpenMsgPBPtr = ^IPMOpenMsgPB;
IPMOpenMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
queueRef: IPMQueueRef;
sequenceNum: IPMSeqNum;
newMsgRef: IPMMsgRef;
actualSeqNum: IPMSeqNum;
exactMatch: BOOLEAN;
padByte: SInt8;
reserved: LONGINT;
END;
IPMOpenHFSMsgPBPtr = ^IPMOpenHFSMsgPB;
IPMOpenHFSMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
hfsPath: FSSpecPtr;
filler: LONGINT;
newMsgRef: IPMMsgRef;
filler2: LONGINT;
filler3: SInt8;
filler4: BOOLEAN;
reserved: LONGINT;
END;
IPMOpenBlockAsMsgPBPtr = ^IPMOpenBlockAsMsgPB;
IPMOpenBlockAsMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
filler: LONGINT;
newMsgRef: IPMMsgRef;
filler2: ARRAY [0..6] OF INTEGER;
blockIndex: INTEGER;
END;
IPMCloseMsgPBPtr = ^IPMCloseMsgPB;
IPMCloseMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
deleteMsg: BOOLEAN;
filler1: BOOLEAN;
END;
IPMGetMsgInfoPBPtr = ^IPMGetMsgInfoPB;
IPMGetMsgInfoPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
info: IPMMsgInfoPtr;
END;
IPMReadHeaderPBPtr = ^IPMReadHeaderPB;
IPMReadHeaderPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
fieldSelector: INTEGER;
offset: LONGINT;
count: LONGINT;
buffer: Ptr;
actualCount: LONGINT;
filler: INTEGER;
remaining: LONGINT;
END;
IPMReadRecipientPBPtr = ^IPMReadRecipientPB;
IPMReadRecipientPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
rcptIndex: INTEGER;
offset: LONGINT;
count: LONGINT;
buffer: Ptr;
actualCount: LONGINT;
reserved: INTEGER; { must be zero }
remaining: LONGINT;
originalIndex: INTEGER;
recipientOffsetFlags: SInt8;
filler1: BOOLEAN;
END;
{
replyQueue works like recipient. [can no longer read it via ReadHeader]
OriginalIndex is meaningless, rcptFlags are used seperately and there are
currently none defined.
}
IPMReadReplyQueuePB = IPMReadRecipientPB;
IPMReadReplyQueuePBPtr = ^IPMReadReplyQueuePB;
IPMGetBlkIndexPBPtr = ^IPMGetBlkIndexPB;
IPMGetBlkIndexPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
blockType: IPMBlockType;
index: INTEGER;
startingFrom: INTEGER;
actualBlockType: IPMBlockType;
actualBlockIndex: INTEGER;
END;
IPMReadMsgPBPtr = ^IPMReadMsgPB;
IPMReadMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
mode: IPMAccessMode;
offset: LONGINT;
count: LONGINT;
buffer: Ptr;
actualCount: LONGINT;
blockIndex: INTEGER;
remaining: LONGINT;
END;
IPMVerifySignaturePBPtr = ^IPMVerifySignaturePB;
IPMVerifySignaturePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
signatureContext: SIGContextPtr;
END;
IPMNewMsgPBPtr = ^IPMNewMsgPB;
IPMNewMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
filler: LONGINT;
recipient: OCERecipientPtr;
replyQueue: OCERecipientPtr;
procHint: StringPtr;
filler2: INTEGER;
msgType: IPMMsgTypePtr;
refCon: LONGINT;
newMsgRef: IPMMsgRef;
filler3: INTEGER;
filler4: LONGINT;
identity: AuthIdentity;
sender: IPMSenderPtr;
internalUse: LONGINT;
internalUse2: LONGINT;
END;
IPMNewHFSMsgPBPtr = ^IPMNewHFSMsgPB;
IPMNewHFSMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
hfsPath: FSSpecPtr;
recipient: OCERecipientPtr;
replyQueue: OCERecipientPtr;
procHint: StringPtr;
filler2: INTEGER;
msgType: IPMMsgTypePtr;
refCon: LONGINT;
newMsgRef: IPMMsgRef;
filler3: INTEGER;
filler4: LONGINT;
identity: AuthIdentity;
sender: IPMSenderPtr;
internalUse: LONGINT;
internalUse2: LONGINT;
END;
IPMNestMsgPBPtr = ^IPMNestMsgPB;
IPMNestMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
filler: ARRAY [0..8] OF INTEGER;
refCon: LONGINT;
msgToNest: IPMMsgRef;
filler2: INTEGER;
startingOffset: LONGINT;
END;
IPMNewNestedMsgBlockPBPtr = ^IPMNewNestedMsgBlockPB;
IPMNewNestedMsgBlockPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
recipient: OCERecipientPtr;
replyQueue: OCERecipientPtr;
procHint: StringPtr;
filler1: INTEGER;
msgType: IPMMsgTypePtr;
refCon: LONGINT;
newMsgRef: IPMMsgRef;
filler2: INTEGER;
startingOffset: LONGINT;
identity: AuthIdentity;
sender: IPMSenderPtr;
internalUse: LONGINT;
internalUse2: LONGINT;
END;
IPMEndMsgPBPtr = ^IPMEndMsgPB;
IPMEndMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
msgID: IPMMsgID;
msgTitle: RStringPtr;
deliveryNotification: SInt8;
priority: SInt8;
cancel: BOOLEAN;
padByte: SInt8;
reserved: LONGINT;
signature: SIGSignaturePtr;
signatureSize: Size;
signatureContext: SIGContextPtr;
{ family this msg belongs (e.g. mail) use kIPMFamilyUnspecified by default }
family: OSType;
END;
IPMAddRecipientPBPtr = ^IPMAddRecipientPB;
IPMAddRecipientPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
recipient: OCERecipientPtr;
reserved: LONGINT;
END;
IPMAddReplyQueuePBPtr = ^IPMAddReplyQueuePB;
IPMAddReplyQueuePB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
filler: LONGINT;
replyQueue: OCERecipientPtr;
END;
IPMNewBlockPBPtr = ^IPMNewBlockPB;
IPMNewBlockPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
blockType: IPMBlockType;
filler: ARRAY [0..4] OF INTEGER;
refCon: LONGINT;
filler2: ARRAY [0..2] OF INTEGER;
startingOffset: LONGINT;
END;
IPMWriteMsgPBPtr = ^IPMWriteMsgPB;
IPMWriteMsgPB = RECORD
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
msgRef: IPMMsgRef;
mode: IPMAccessMode;
offset: LONGINT;
count: LONGINT;
buffer: Ptr;
actualCount: LONGINT;
currentBlock: BOOLEAN;
filler1: BOOLEAN;
END;
IPMParamBlock = RECORD
CASE INTEGER OF
0: (
qLink: Ptr;
reservedH1: LONGINT;
reservedH2: LONGINT;
ioCompletion: IPMIOCompletionUPP;
ioResult: OSErr;
saveA5: LONGINT;
reqCode: INTEGER;
);
1: (
openContextPB: IPMOpenContextPB;
);
2: (
closeContextPB: IPMCloseContextPB;
);
3: (
createQueuePB: IPMCreateQueuePB;
);
4: (
deleteQueuePB: IPMDeleteQueuePB;
);
5: (
openQueuePB: IPMOpenQueuePB;
);
6: (
closeQueuePB: IPMCloseQueuePB;
);
7: (
enumerateQueuePB: IPMEnumerateQueuePB;
);
8: (
changeQueueFilterPB: IPMChangeQueueFilterPB;
);
9: (
deleteMsgRangePB: IPMDeleteMsgRangePB;
);
10: (
openMsgPB: IPMOpenMsgPB;
);
11: (
openHFSMsgPB: IPMOpenHFSMsgPB;
);
12: (
openBlockAsMsgPB: IPMOpenBlockAsMsgPB;
);
13: (
closeMsgPB: IPMCloseMsgPB;
);
14: (
getMsgInfoPB: IPMGetMsgInfoPB;
);
15: (
readHeaderPB: IPMReadHeaderPB;
);
16: (
readRecipientPB: IPMReadRecipientPB;
);
17: (
readReplyQueuePB: IPMReadReplyQueuePB;
);
18: (
getBlkIndexPB: IPMGetBlkIndexPB;
);
19: (
readMsgPB: IPMReadMsgPB;
);
20: (
verifySignaturePB: IPMVerifySignaturePB;
);
21: (
newMsgPB: IPMNewMsgPB;
);
22: (
newHFSMsgPB: IPMNewHFSMsgPB;
);
23: (
nestMsgPB: IPMNestMsgPB;
);
24: (
newNestedMsgBlockPB: IPMNewNestedMsgBlockPB;
);
25: (
endMsgPB: IPMEndMsgPB;
);
26: (
addRecipientPB: IPMAddRecipientPB;
);
27: (
addReplyQueuePB: IPMAddReplyQueuePB;
);
28: (
newBlockPB: IPMNewBlockPB;
);
29: (
writeMsgPB: IPMWriteMsgPB;
);
END;
CONST
uppIPMIOCompletionProcInfo = $00009802;
PROCEDURE CallIPMIOCompletionProc(paramBlock: IPMParamBlockPtr; userRoutine: IPMIOCompletionUPP);
{$IFC NOT GENERATINGCFM}
{To be implemented: Glue to move parameters into registers.}
{$ENDC}
FUNCTION NewIPMIOCompletionProc(userRoutine: IPMIOCompletionProcPtr): IPMIOCompletionUPP;
{$IFC NOT GENERATINGCFM }
INLINE $2E9F;
{$ENDC}
FUNCTION IPMOpenContext(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0400, $AA5E;
{$ENDC}
FUNCTION IPMCloseContext(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0401, $AA5E;
{$ENDC}
FUNCTION IPMNewMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0402, $AA5E;
{$ENDC}
FUNCTION IPMNewBlock(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0404, $AA5E;
{$ENDC}
FUNCTION IPMNewNestedMsgBlock(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0405, $AA5E;
{$ENDC}
FUNCTION IPMNestMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0406, $AA5E;
{$ENDC}
FUNCTION IPMWriteMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0407, $AA5E;
{$ENDC}
FUNCTION IPMEndMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0408, $AA5E;
{$ENDC}
FUNCTION IPMOpenQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0409, $AA5E;
{$ENDC}
FUNCTION IPMCloseQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $040A, $AA5E;
{$ENDC}
{ Always synchronous }
FUNCTION IPMVerifySignature(paramBlock: IPMParamBlockPtr): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $7000, $1F00, $3F3C, $0422, $AA5E;
{$ENDC}
FUNCTION IPMOpenMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $040B, $AA5E;
{$ENDC}
FUNCTION IPMCloseMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $040C, $AA5E;
{$ENDC}
FUNCTION IPMReadMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $040D, $AA5E;
{$ENDC}
FUNCTION IPMReadHeader(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $040E, $AA5E;
{$ENDC}
FUNCTION IPMOpenBlockAsMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $040F, $AA5E;
{$ENDC}
FUNCTION IPMNewHFSMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $041E, $AA5E;
{$ENDC}
FUNCTION IPMReadRecipient(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0410, $AA5E;
{$ENDC}
FUNCTION IPMReadReplyQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0421, $AA5E;
{$ENDC}
FUNCTION IPMCreateQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0411, $AA5E;
{$ENDC}
FUNCTION IPMDeleteQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0412, $AA5E;
{$ENDC}
FUNCTION IPMEnumerateQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0413, $AA5E;
{$ENDC}
FUNCTION IPMChangeQueueFilter(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0414, $AA5E;
{$ENDC}
FUNCTION IPMDeleteMsgRange(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0415, $AA5E;
{$ENDC}
FUNCTION IPMAddRecipient(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0403, $AA5E;
{$ENDC}
FUNCTION IPMAddReplyQueue(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $041D, $AA5E;
{$ENDC}
FUNCTION IPMOpenHFSMsg(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0417, $AA5E;
{$ENDC}
FUNCTION IPMGetBlkIndex(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0418, $AA5E;
{$ENDC}
FUNCTION IPMGetMsgInfo(paramBlock: IPMParamBlockPtr; async: BOOLEAN): OSErr;
{$IFC NOT GENERATINGCFM}
INLINE $3F3C, $0419, $AA5E;
{$ENDC}
{$ENDC}
{$ALIGN RESET}
{$POP}
{$SETC UsingIncludes := OCEMessagingIncludes}
{$ENDC} {__OCEMESSAGING__}
{$IFC NOT UsingIncludes}
END.
{$ENDC}